package com.edu.juc.jmm.volatiles;

import com.edu.juc.jmm.bean.MyNumber;

import java.util.concurrent.TimeUnit;

/**
 * 为什么没有原子性？
 * 对于volatile具备可见性，JVM只保证从主内存加载到线程工作内存的值是最新的，也仅是数据加载时是最新的。
 * 各线程私有内存和主内存公共内存中变量不同步，进而导致数据不一致。
 * 对于多线程修改主内存共享变量的场景必须使用加锁同步。
 */
public class VolatileNoAtomicTest {
    public static void main(String[] args) throws InterruptedException {
        MyNumber myNumber = new MyNumber();
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                for (int j = 0; j < 1000; j++) {
                    myNumber.add();
                }
            }).start();
        }

        TimeUnit.SECONDS.sleep(2);
        System.out.println(myNumber.getNumber());
    }
}
